
################################################################################################################# DEBUG/RELEASE MODE

############################ DOC CL OPTIONS

# -MTd   : Creates a debug multithreaded executable file, No need to define _DEBUG, compiler does it for us if -MTd flag is on
# -DGSL_RANGE_CHECK : tells the mat lib to do range checking
# -Zi    : Generates complete debugging information
# -nolog : In brief, the positive form suppresses the logo at startup and the negative form makes explicit that this suppression is not wanted. However, there are some other effects. 
# -O2 	 : Creates fast code
# -W3 	 : Sets warning level
# -MT 	 : Causes your application to use the multithread, static version of the run-time library. 
#     	   Defines _MT and causes the compiler to place the library name LIBCMT.lib into the .obj file 
#     	   so that the linker will use LIBCMT.lib to resolve external symbols.
# -MD 	 : Causes your application to use the multithread- and DLL-specific version of the run-time library
#     	   Defines _MT and _DLL and causes the compiler to place the library name MSVCRT.lib into the .obj file.
#    	   Applications compiled with this option are statically linked to MSVCRT.lib. 
#     	   This library provides a layer of code that allows the linker to resolve external references. 
#     	   The actual working code is contained in MSVCR100.DLL, which must be available at run time to applications linked with MSVCRT.lib.
# -GF 	 : enable string pooling
# -Gy 	 : enable function-level linking
# -EHsc  : exception model to use : /EHsc -> intercept only C++ exceptions, extern C functions never launch C++ exception.
# 	   object files go to -Fo 

COMPILE_NUMPROC = -MP$(NUMBER_OF_PROCESSORS)

# We include setargv.obj for executables that do command line filename globbing.
# PROGRAMFILES is inherited from the shell evironment (where it is
# called ProgramFiles, but nmake converts it to upper case).  This allows us
# to work with systems that use \Program Files or \Program Files x86.
SETARGV = "$(PROGRAMFILES) (x86)/Microsoft Visual Studio 10.0/VC/lib/amd64/setargv.obj"

# we include binmode.obj so files are opened as _O_BINARY, for compat with unix
BINMODE = "$(PROGRAMFILES) (x86)/Microsoft Visual Studio 10.0/VC/lib/amd64/binmode.obj"

WINLIBS= 	"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\advapi32.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\comctl32.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\comdlg32.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\gdi32.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\shell32.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\user32.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\vfw32.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\winmm.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\opengl32.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\kernel32.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\winspool.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\ole32.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\oleaut32.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\uuid.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\odbc32.lib"\
		"$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\odbccp32.lib"\
 

############################ DIRECTORIES

LIBDIR	     	 =./lib
BINDIR=./bin

############################ INCLUDES

INC_OTHERS	= -I$(SW_DIST)\include
	
INC_SW    	= -I./include\
	
INC_VS		= -I"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include" -I"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include"\		  

INC_OPENNI	= -I$(THIRD_PARTY_OPENNI64)/Include

INC_OPENCV	= -I$(THIRD_PARTY_OPENCV64)/Include

INC_YARP	= -I"$(THIRD_PARTY_YARP64)"/include

INC_HANDTRACKER = -I"$(THIRD_PARTY_HANDTRACKER64)"/Include

############################ DEPENDENCIES

COMMON	 	    = $(INC_VS) $(INC_SW) $(INC_OTHERS)
#	hand tracker
SW_HAND_TRACKER		    = $(COMMON) $(INC_OPENNI) $(INC_OPENCV) $(INC_YARP) $(INC_HANDTRACKER)

############################ COMMON DEBUG/RELEASE LIBS

LIBS_COMMON	= "$(PROGRAMFILES) (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64\WS2_32.lib"

################################################################################################################# RELEASE MODE

!IF  "$(CFG)" == "Release"
	
############################ FLAGS

CFLAGS_STA = -nologo -O2 -GF -Gy -W3 -w44996 -w14189 -MT -EHsc -DWIN32 $(COMPILE_NUMPROC) 
CFLAGS_DYN = -nologo -O2 -GF -Gy -W3 -w44996 -w14189 -MD -EHsc -DWIN32 $(COMPILE_NUMPROC)

LFLAGS=-nologo -nodefaultlib:LIBCMT -nodefaultlib:LIBC -nodefaultlib:MSVCPRT
LFLAGS_SK=-nologo -MACHINE:X64

############################ LIBS

LIBS_OPENNI		= 	$(THIRD_PARTY_OPENNI64)/Lib/openNI2.lib

LIBS_OPENCV		=	$(THIRD_PARTY_OPENCV64)/Lib/opencv_core231.lib\
				$(THIRD_PARTY_OPENCV64)/Lib/opencv_highgui231.lib\
				$(THIRD_PARTY_OPENCV64)/Lib/opencv_imgproc231.lib

LIBS_YARP		= 	$(THIRD_PARTY_YARP64)/lib/YARP_sig.lib\
				$(THIRD_PARTY_YARP64)/lib/YARP_OS.lib\
				$(THIRD_PARTY_YARP64)/lib/YARP_dev.lib\
				$(THIRD_PARTY_YARP64)/lib/YARP_init.lib\
				$(THIRD_PARTY_YARP64)/lib/YARP_math.lib
				
				
LIBS_TRACKER		= $(THIRD_PARTY_HANDTRACKER64)/lib/HandTrackerLib.lib

LIBS_HAND_TRACKER	= $(LIBS_COMMON) $(LIBS_OPENNI) $(LIBS_OPENCV) $(LIBS_YARP) $(LIBS_TRACKER)

	
!ENDIF

################################################################################################################# DEBUG MODE

!IF  "$(CFG)" == "Debug"

############################ FLAGS

CFLAGS_STA= -nologo -Zi -W2 -MTd -EHsc -DWIN32 $(COMPILE_NUMPROC) -D_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH
CFLAGS_DYN= -nologo -Zi -W2 -MDd -EHsc -DWIN32 $(COMPILE_NUMPROC) -D_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH

LFLAGS=-nologo -nodefaultlib:LIBCMT -nodefaultlib:MSVCRT 
LFLAGS_SK=-nologo


############################ LIBS

LIBS_OPENNI	= $(THIRD_PARTY_OPENNI64)/Lib/openNI2.lib 

LIBS_OPENCV		=	$(THIRD_PARTY_OPENCV64)/Lib/opencv_core231.lib\
				$(THIRD_PARTY_OPENCV64)/Lib/opencv_highgui231.lib\
				$(THIRD_PARTY_OPENCV64)/Lib/opencv_imgproc231.lib

LIBS_YARP		= 	$(THIRD_PARTY_YARP64)/lib/YARP_sigd.lib\
				$(THIRD_PARTY_YARP64)/lib/YARP_OSd.lib\
				$(THIRD_PARTY_YARP64)/lib/YARP_devd.lib\
				$(THIRD_PARTY_YARP64)/lib/YARP_initd.lib\
				$(THIRD_PARTY_YARP64)/lib/YARP_mathd.lib
				
LIBS_TRACKER		= 	$(THIRD_PARTY_HANDTRACKER64)/lib/HandTrackerLib.lib
		 
LIBS_HAND_TRACKER	= $(LIBS_COMMON) $(LIBS_OPENNI)  $(LIBS_OPENCV) $(LIBS_YARP) $(LIBS_TRACKER)
	

!ENDIF
